Various storage mechanisms are available that use multiple storage devices to provide data storage with improved performance and reliability than an individual storage device. For example, a Redundant Array of Independent Disks (RAID) system includes multiple disks that store data. RAID systems and other storage mechanisms using multiple storage devices provide improved reliability by using parity data. Parity data allows a system to reconstruct lost data if one of the storage devices fails or is disconnected from the storage mechanism.
Several techniques are available that permit the reconstruction of lost data. One technique reserves one or more storage devices in the storage mechanism for future use if one of the active storage devices fails. The reserved storage devices remain idle and are not used for data storage unless one of the active storage devices fails. If an active storage device fails, the missing data from the failed device is reconstructed onto one of the reserved storage devices. A disadvantage of this technique is that one or more storage devices are unused unless there is a failure of an active storage device. Thus, the overall performance of the storage device is reduced because available resources (the reserved storage devices) are not being utilized. Further, if one of the reserved storage devices fails, the failure may not be detected until one of the active storage devices fails and the reserved storage device is needed.
Another technique for reconstructing lost data uses all storage devices to store data, but reserves a specific amount of space on each storage device in case one of the storage devices fail. Using this technique, the storage mechanism realizes improved performance by utilizing all of the storage devices while maintaining space for the reconstruction of data if a storage device fails. In this type of storage mechanism, data is typically striped across the storage devices. This data striping process spreads data over multiple storage devices to improve performance of the storage mechanism. The data striping process is used in conjunction with other methods (e.g., parity data) to provide fault tolerance and/or error checking. The parity data provides a logical connection that relates the data spread across the multiple storage devices.
A problem with the above technique arises from the logical manner in which data is striped across the storage devices. To reconstruct data from a failed storage device and store that data in the unused space on the remaining storage devices, the storage mechanism relocates all of the data on all of the storage devices (i.e., not just the data from the failed storage device). Relocation of all data in a data stripe is time consuming and uses a significant amount of processing resources. Additionally, input/output requests by host equipment coupled to the storage mechanism are typically delayed during this relocation of data, which is disruptive to the normal operation of the host equipment.
Accordingly, there is a need for an improved system and method to reconstruct data in a storage mechanism that contains multiple storage devices.